package com.tupu.service.admin;


import com.tupu.common.PageResult;
import com.tupu.entity.admin.LabelVisualized;
import com.tupu.entity.neo4j.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface NodeService {

    //新增节点 验证uid是否唯一
    String createNode(NodeSingle node);

    //新增节点 验证uid是否唯一 可视化
    String createNodeVis(NodeSingle node);

    //实例节点高级检索
    LabelVisualized nodeAdvancedSearch(Long node_id, Long label_id, Long property_id, String property);

    //实例关系搜索
    LabelVisualized relationSearch(Long node_id, String relation);

    //根据标签和属性查询所有属性值
    List<String> findAllProperty(Long node_id, Long label_id, Long property_id);

    //新增实例
    void addNode(String file_path, Long node_id) throws IOException;

    //新增实例关系
    void addNodeRelation(String s, Long node_id) throws IOException;

    //实例关系高级搜索
    LabelVisualized relationAdvancedSearch(Long node_id, Long start_label, Long start_proId, String start_property, Long end_label, Long end_proId, String end_property, String relation);

    //最短路径
    LabelVisualized shortestPath(Long node_id, Long start_label, Long start_proId, String start_property, Long end_label, Long end_proId, String end_property);

    //查询节点id和名称
    List<NodeSimple> allNode(Long node_id);

    //实例节点检索
    LabelVisualized nodeSearch(Long node_id, Long case_id, String name);

    //切换可视化显示属性
    LabelVisualized changePropertyVis(Long node_id, Long label_id, Long property_id, String property_name);

    //实例切换层级(type=1,一阶邻居;type=2,二阶邻居;type=3,三阶邻居)
    LabelVisualized levelVis(Long type, Long node_id, String label_name, String case_name, String case_id);

    //实例列表 可视化
    LabelVisualized nodeListVis(Long nodeId, Long size);

    //通过实例id查询实例属性信息
    NodeListOne findNodeById(Long id);

    //根据关系名称 relationName、node_id 查询实例关系数据，分页
    PageResult<RelationListAll> findByRelationNameAndNodeId(Integer page, Integer size, String relation_name, Long node_id);

    //根据图谱id和实例名称 label 查询节点，分页
    NodeListAll searchNodeByName(Integer page, Integer size, Long nodeId, String label, String case_name);

    //根据关系id修改 节点间关系
    void updateRelation(Long relation_id, Long startId, Long endId, Long typeId);

    //上传导入word故障预案
    void uploadByWord(String filePath, Long node_id) throws IOException;

    //实例数据
    PageResult<NodeSingle> nodeDataManagement(String name, Long node_id, Long page, Long size);

    //实例关系数据
    PageResult<RelationListAll> nodeRelationDataManagement(String name, Long node_id, Long page, Long size);

    //根据关系id 集合 删除节点间关系
    void delRelationByIds(List<Long> ids);

    //根据实例id集合 删除节点
    void delNodeByIds(List<Long> ids);

    //根据实例id删除节点,同时删除关系
    void delNodeById(Long id);

    //根据关系id删除节点间关系
    void delRelationById(Long relation_id);

    //根据图谱绑定node_id 查询实例的id及名称
    List<NodeSimple> findByNodeId(Long nodeId, Long size);

    //修改节点属性信息
    void updateNode(NodeSingle node);

    //创建节点间关系
    void CreateRelation(Long startId, Long endId, Long typeId);

    //根据关系id，relation_id查询一条关系数据
    RelationListAll findOneRelation(Long relation_id);

    //实例数据(不分页)
    List<NodeSingle> nodeDataManagementAll(Long node_id);

    //实例关系数据(不分页)
    List<RelationListAll> nodeRelationDataManagementAll(Long node_id);

    //新增实例 可视化
    LabelVisualized addNodeVis(NodeSingle node);
}